import { ElMessage, ElMessageBox } from 'element-plus'

export function useTableOperations(tableData, searchResults, hasSearched) {
    // 删除单行数据
    const deleteRow = (row, idField, itemName, onDelete) => {
        ElMessageBox.confirm(
            `确定要删除${itemName}吗？此操作不可恢复。`,
            '确认删除',
            {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
            }
        ).then(async () => {
            try {
                // 如果有自定义删除逻辑，执行它
                if (onDelete) {
                    await onDelete(row)
                }
                
                // 从原始数据中移除
                const index = tableData.value.findIndex(item => item[idField] === row[idField])
                if (index !== -1) {
                    tableData.value.splice(index, 1)
                }

                // 如果已经搜索过，也需要从搜索结果中移除
                if (hasSearched.value) {
                    const searchIndex = searchResults.value.findIndex(item => item[idField] === row[idField])
                    if (searchIndex !== -1) {
                        searchResults.value.splice(searchIndex, 1)
                    }
                }

                ElMessage.success(`${itemName}删除成功`)
            } catch (error) {
                console.error('删除失败:', error)
                ElMessage.error('删除失败: ' + (error.message || '未知错误'))
            }
        }).catch(() => {
            // 用户取消删除
            ElMessage.info('已取消删除')
        })
    }
    
    // 批量删除数据
    const batchDelete = (selectedRows, idField, itemName, canOperate, onBatchDelete) => {
        // 检查是否有选中的行
        if (selectedRows.length === 0) {
            ElMessage.warning(`请至少选择一个${itemName}进行删除`)
            return
        }

        // 过滤掉不能操作的行
        const deletableRows = selectedRows.filter(row => canOperate ? canOperate(row) : true)

        // 检查是否有可删除的行
        if (deletableRows.length === 0) {
            ElMessage.warning(`没有可删除的${itemName}`)
            return
        }

        // 确认删除
        ElMessageBox.confirm(
            `确定要删除选中的 ${deletableRows.length} 个${itemName}吗？此操作不可恢复。`,
            '确认批量删除',
            {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
            }
        ).then(async () => {
            try {
                // 如果有自定义批量删除逻辑，执行它
                if (onBatchDelete) {
                    await onBatchDelete(deletableRows)
                } else {
                    // 删除选中的行
                    deletableRows.forEach(row => {
                        // 从原始数据中移除
                        const index = tableData.value.findIndex(item => item[idField] === row[idField])
                        if (index !== -1) {
                            tableData.value.splice(index, 1)
                        }

                        // 如果已经搜索过，也需要从搜索结果中移除
                        if (hasSearched.value) {
                            const searchIndex = searchResults.value.findIndex(item => item[idField] === row[idField])
                            if (searchIndex !== -1) {
                                searchResults.value.splice(searchIndex, 1)
                            }
                        }
                    })
                }

                ElMessage.success(`成功删除 ${deletableRows.length} 个${itemName}`)
            } catch (error) {
                console.error('批量删除失败:', error)
                ElMessage.error('批量删除失败: ' + (error.message || '未知错误'))
            }
        }).catch(() => {
            // 用户取消删除
            ElMessage.info('已取消批量删除')
        })
    }

    return {
        deleteRow,
        batchDelete
    }
}